/*
内联汇编

Rust 提供了 asm! 宏，可以让大家在 Rust 代码中嵌入汇编代码，
对于一些极致高性能或者底层的场景还是非常有用的，例如操作系统内核开发。
但通常来说，大家并不应该在自己的项目中使用到该项技术，它为极客而生！
*/

use std::arch::asm;

pub fn run1() {
    let mut x: u64;
    let mut n: u64;
    unsafe {
        // 第一条汇编指令：将立即数 5 移动到 x 变量对应的寄存器中
        asm!("mov {}, 5", out(reg) x);

        // 第二条汇编指令：使用两个指令操作
        asm!("mov {0}, {1}",     // 先将 x 的值复制到 n 的寄存器
         "add {0}, 5 ",      // 然后在 n 的寄存器值上加 5
         out(reg) n, in(reg) x); // n 是输出，x 是输入

        // 第三条汇编指令：在 x 的当前值上加 5
        asm!("add {0}, 5", inout(reg) x); // 使用同一个寄存器进行输入和输出

        // 第四条汇编指令：在 x 的当前值上加 5，但结果存储到 n 中
        asm!("add {0}, 5", inout(reg) x => n); // x 是输入，n 是输出

        /*
        out(reg)：指定输出寄存器

        in(reg)：指定输入寄存器

        inout(reg)：同一个寄存器既用于输入又用于输出

        x => n：语法表示使用 x 作为输入，n 作为输出
        */
    }

    println!("x:{0},{1}", x, n); // 打印最终的 x 和 n 值
}




pub fn run() {
    run1();
}
